package com.study.aop.theory.proxy;

import com.study.aop.theory.service.KtvService;

/**
 * 静态代理
 * 1、实现同样的接口
 * 2、持有被代理对象
 *
 * 优点：
 * 调用者和代理对象的桥梁
 * 无侵入性的增强业务代码，解耦利器
 * 增强点多样化（前入、后入、异常、环绕）
 *
 * 缺点：
 * 扩展能力差
 *      横向扩展：代理更多的类
 *      纵向扩展：增强更多的方法
 * 可维护性差
 *
 * @author: chenhs
 * @date: Created in 15:57 2019/12/8
 **/
public class StaticProxy implements KtvService {

    private KtvService target;

    public StaticProxy(KtvService target) {
        this.target = target;
    }

    @Override
    public void momoSing(String customer) {
        long stime = System.currentTimeMillis();
        //执行业务方法
        this.target.momoSing(customer);

        long useTime = System.currentTimeMillis() - stime;

        System.out.println("记录：" + this.target.getClass() + ". momoSing 耗时：" + (useTime / 1000) + " 秒");

    }
}
